{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import string\n",
    "import itertools\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "from tqdm import tqdm_notebook as tqdm\n",
    "\n",
    "from gensim.models import *\n",
    "\n",
    "import tensorflow as tf\n",
    "from tensorflow.keras.utils import *\n",
    "from tensorflow.keras.layers import *\n",
    "from tensorflow.keras.models import *\n",
    "import tensorflow.keras.backend as K\n",
    "from tensorflow.keras.preprocessing.text import Tokenizer\n",
    "from tensorflow.keras.preprocessing.sequence import pad_sequences\n",
    "\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.metrics import classification_report, confusion_matrix"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "def plot_confusion_matrix(cm, classes, title='Confusion matrix', cmap=plt.cm.Blues):\n",
    "\n",
    "    cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]\n",
    "\n",
    "    plt.imshow(cm, interpolation='nearest', cmap=cmap)\n",
    "    plt.title(title, fontsize=25)\n",
    "    #plt.colorbar()\n",
    "    tick_marks = np.arange(len(classes))\n",
    "    plt.xticks(tick_marks, classes, rotation=90, fontsize=15)\n",
    "    plt.yticks(tick_marks, classes, fontsize=15)\n",
    "\n",
    "    fmt = '.2f'\n",
    "    thresh = cm.max() / 2.\n",
    "    for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):\n",
    "        plt.text(j, i, format(cm[i, j], fmt),\n",
    "                 horizontalalignment=\"center\",\n",
    "                 color=\"white\" if cm[i, j] > thresh else \"black\", fontsize = 14)\n",
    "\n",
    "    plt.ylabel('True label', fontsize=20)\n",
    "    plt.xlabel('Predicted label', fontsize=20)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(2225, 2)\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>category</th>\n",
       "      <th>text</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>tech</td>\n",
       "      <td>tv future in the hands of viewers with home th...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>business</td>\n",
       "      <td>worldcom boss  left books alone  former worldc...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>sport</td>\n",
       "      <td>tigers wary of farrell  gamble  leicester say ...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>sport</td>\n",
       "      <td>yeading face newcastle in fa cup premiership s...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>entertainment</td>\n",
       "      <td>ocean s twelve raids box office ocean s twelve...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        category                                               text\n",
       "0           tech  tv future in the hands of viewers with home th...\n",
       "1       business  worldcom boss  left books alone  former worldc...\n",
       "2          sport  tigers wary of farrell  gamble  leicester say ...\n",
       "3          sport  yeading face newcastle in fa cup premiership s...\n",
       "4  entertainment  ocean s twelve raids box office ocean s twelve..."
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "### READ DATA ###\n",
    "\n",
    "df = pd.read_csv('bbc-text.csv')\n",
    "\n",
    "print(df.shape)\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x245028ab4e0>"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "### LABEL DISTRIBUTION ###\n",
    "\n",
    "df.category.value_counts().plot.pie(figsize=(6,6))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "### SIMPLE CLEAN OF TEXT ###\n",
    "\n",
    "df['text'] = df.text.str.lower().str.replace(r'['+string.digits+string.punctuation+']', ' ')\n",
    "df['text'] = df['text'].apply(lambda x: x.split())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "### SPLIT INTO TRAIN/TEST ###\n",
    "\n",
    "y = to_categorical(df.category.factorize()[0])\n",
    "\n",
    "X_train, X_test, y_train, y_test = train_test_split(df['text'].tolist(), y, random_state=33, test_size=0.2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{0: 'tech', 1: 'business', 2: 'sport', 3: 'entertainment', 4: 'politics'}"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "### MAP LABEL ###\n",
    "\n",
    "diz_label = {}\n",
    "for i,label in enumerate(df.category.factorize()[1]):\n",
    "    diz_label[i] = label\n",
    "    \n",
    "diz_label"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "### TRAIN WORD2VEC AND FASTTEXT ###\n",
    "\n",
    "w2v = Word2Vec(size=100, window=5, min_count=4, seed=33)\n",
    "w2v.build_vocab(X_train)\n",
    "w2v.train(X_train, total_examples=w2v.corpus_count, epochs=10)\n",
    "\n",
    "ft = FastText(size=100, window=5, min_count=4, seed=33)\n",
    "ft.build_vocab(X_train)\n",
    "ft.train(X_train, total_examples=ft.corpus_count, epochs=10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(1780, 200) (445, 200)\n"
     ]
    }
   ],
   "source": [
    "### TRANSFORM ORIGINAL TEXT INTO SEQUENCES AND COMPUTE PADDING ###\n",
    "\n",
    "max_len = 200\n",
    "\n",
    "tokenizer = Tokenizer(lower=True)\n",
    "tokenizer.fit_on_texts(X_train)\n",
    "\n",
    "sequence_train = tokenizer.texts_to_sequences(X_train)\n",
    "sequence_train = pad_sequences(sequence_train, maxlen=max_len)\n",
    "\n",
    "sequence_test = tokenizer.texts_to_sequences(X_test)\n",
    "sequence_test = pad_sequences(sequence_test, maxlen=max_len)\n",
    "\n",
    "sequence_train = np.asarray(sequence_train)\n",
    "sequence_test = np.asarray(sequence_test)\n",
    "\n",
    "print(sequence_train.shape, sequence_test.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "not in vocabulary 14539\n"
     ]
    }
   ],
   "source": [
    "### GET TRAINED WEIGHTS FOR EACH WORD FROM WORD2VEC ###\n",
    "\n",
    "embedding_matrix_w2v = np.random.random((len(tokenizer.word_index) + 1, 100))\n",
    "\n",
    "pas = 0\n",
    "for word,i in tokenizer.word_index.items():\n",
    "    \n",
    "    try:\n",
    "        embedding_matrix_w2v[i] = w2v.wv[word]\n",
    "    except:\n",
    "        pas+=1\n",
    "        \n",
    "print('not in vocabulary', pas)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "not in vocabulary 0\n"
     ]
    }
   ],
   "source": [
    "### GET TRAINED WEIGHTS FOR EACH WORD FROM FASTTEXT ###\n",
    "\n",
    "embedding_matrix_ft = np.random.random((len(tokenizer.word_index) + 1, 100))\n",
    "\n",
    "pas = 0\n",
    "for word,i in tokenizer.word_index.items():\n",
    "    \n",
    "    try:\n",
    "        embedding_matrix_ft[i] = ft.wv[word]\n",
    "    except:\n",
    "        pas+=1\n",
    "        \n",
    "print('not in vocabulary', pas)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "### DEFINE INPUT LAYER FOR EMBEDDINGS READING AND CONCATENATION ###\n",
    "\n",
    "def Concat_Emb(list_emb, maxlen):\n",
    "    \n",
    "    inputs = []\n",
    "    output = []\n",
    "    for embedding in list_emb:\n",
    "        \n",
    "        inp = Input(shape=(maxlen,))\n",
    "        emb = Embedding(len(tokenizer.word_index) + 1, 100, weights=[embedding], trainable=False)(inp)\n",
    "        emb = Reshape((-1,100,1))(emb)\n",
    "        inputs.append(inp)\n",
    "        output.append(emb)\n",
    "        \n",
    "    concat = Concatenate(axis=-1)(output)\n",
    "    \n",
    "    return Model(inputs, concat)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"model\"\n",
      "__________________________________________________________________________________________________\n",
      "Layer (type)                    Output Shape         Param #     Connected to                     \n",
      "==================================================================================================\n",
      "input_1 (InputLayer)            [(None, 200)]        0                                            \n",
      "__________________________________________________________________________________________________\n",
      "input_2 (InputLayer)            [(None, 200)]        0                                            \n",
      "__________________________________________________________________________________________________\n",
      "embedding (Embedding)           (None, 200, 100)     2537000     input_1[0][0]                    \n",
      "__________________________________________________________________________________________________\n",
      "embedding_1 (Embedding)         (None, 200, 100)     2537000     input_2[0][0]                    \n",
      "__________________________________________________________________________________________________\n",
      "reshape (Reshape)               (None, None, 100, 1) 0           embedding[0][0]                  \n",
      "__________________________________________________________________________________________________\n",
      "reshape_1 (Reshape)             (None, None, 100, 1) 0           embedding_1[0][0]                \n",
      "__________________________________________________________________________________________________\n",
      "concatenate (Concatenate)       (None, None, 100, 2) 0           reshape[0][0]                    \n",
      "                                                                 reshape_1[0][0]                  \n",
      "==================================================================================================\n",
      "Total params: 5,074,000\n",
      "Trainable params: 0\n",
      "Non-trainable params: 5,074,000\n",
      "__________________________________________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "### TRY Concat_Emb ###\n",
    "\n",
    "read_emb = Concat_Emb([embedding_matrix_w2v, embedding_matrix_ft], maxlen=max_len)\n",
    "read_emb.summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "### DEFINE DME AND CDME BLOCKS ###\n",
    "\n",
    "def DME(maxlen):\n",
    "\n",
    "    inp = Input(shape=(maxlen, 100, 2))\n",
    "    x = Reshape((maxlen, 100*2))(inp)\n",
    "    x = LSTM(2, return_sequences=True)(x)\n",
    "    x = Activation('sigmoid')(x)\n",
    "    x = Reshape((maxlen, 1, 2))(x)\n",
    "    x = multiply([inp, x])\n",
    "    out = Lambda(lambda t: K.sum(t, axis=-1))(x)\n",
    "    \n",
    "    return Model(inp, out)\n",
    "\n",
    "def CDME(maxlen, latent_dim=2):\n",
    "    \n",
    "    inp = Input(shape=(maxlen, 100, 2))\n",
    "    x = Reshape((maxlen, 100*2))(inp)\n",
    "    x = Bidirectional(LSTM(latent_dim, return_sequences=True))(x)\n",
    "    x = Lambda(lambda t: [t[:,:,:int(latent_dim/2+1)], t[:,:,int(latent_dim/2+1):]])(x)\n",
    "    x = Maximum()(x)\n",
    "    x = Activation('sigmoid')(x)\n",
    "    x = Reshape((maxlen, 1, 2))(x)\n",
    "    x = multiply([inp, x])\n",
    "    out = Lambda(lambda t: K.sum(t, axis=-1))(x)\n",
    "    \n",
    "    return Model(inp, out)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"model_3\"\n",
      "__________________________________________________________________________________________________\n",
      "Layer (type)                    Output Shape         Param #     Connected to                     \n",
      "==================================================================================================\n",
      "input_3 (InputLayer)            [(None, 200)]        0                                            \n",
      "__________________________________________________________________________________________________\n",
      "input_4 (InputLayer)            [(None, 200)]        0                                            \n",
      "__________________________________________________________________________________________________\n",
      "embedding_2 (Embedding)         (None, 200, 100)     2537000     input_3[0][0]                    \n",
      "__________________________________________________________________________________________________\n",
      "embedding_3 (Embedding)         (None, 200, 100)     2537000     input_4[0][0]                    \n",
      "__________________________________________________________________________________________________\n",
      "reshape_2 (Reshape)             (None, None, 100, 1) 0           embedding_2[0][0]                \n",
      "__________________________________________________________________________________________________\n",
      "reshape_3 (Reshape)             (None, None, 100, 1) 0           embedding_3[0][0]                \n",
      "__________________________________________________________________________________________________\n",
      "concatenate_1 (Concatenate)     (None, None, 100, 2) 0           reshape_2[0][0]                  \n",
      "                                                                 reshape_3[0][0]                  \n",
      "__________________________________________________________________________________________________\n",
      "model_2 (Model)                 (None, 200, 100)     1624        concatenate_1[0][0]              \n",
      "__________________________________________________________________________________________________\n",
      "gru (GRU)                       (None, 200, 128)     88320       model_2[1][0]                    \n",
      "__________________________________________________________________________________________________\n",
      "gru_1 (GRU)                     (None, 32)           15552       gru[0][0]                        \n",
      "__________________________________________________________________________________________________\n",
      "dense (Dense)                   (None, 5)            165         gru_1[0][0]                      \n",
      "==================================================================================================\n",
      "Total params: 5,179,661\n",
      "Trainable params: 105,661\n",
      "Non-trainable params: 5,074,000\n",
      "__________________________________________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "### DEFINE NETWORK WITH DME ###\n",
    "\n",
    "concat_inp = Concat_Emb([embedding_matrix_w2v, embedding_matrix_ft], maxlen=max_len)\n",
    "dme = DME(max_len)\n",
    "x = dme(concat_inp.output)\n",
    "x = GRU(128, dropout=0.2, return_sequences=True)(x)\n",
    "x = GRU(32, dropout=0.2)(x)\n",
    "out = Dense(y.shape[1], activation='softmax')(x)\n",
    "\n",
    "dme_model = Model(concat_inp.input, out)\n",
    "dme_model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])\n",
    "\n",
    "dme_model.summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/20\n",
      "13/13 - 8s - loss: 1.4712 - accuracy: 0.3864 - val_loss: 1.3488 - val_accuracy: 0.4719\n",
      "Epoch 2/20\n",
      "13/13 - 8s - loss: 1.2355 - accuracy: 0.5144 - val_loss: 1.2215 - val_accuracy: 0.5449\n",
      "Epoch 3/20\n",
      "13/13 - 9s - loss: 1.0699 - accuracy: 0.5805 - val_loss: 1.0908 - val_accuracy: 0.5899\n",
      "Epoch 4/20\n",
      "13/13 - 8s - loss: 0.8872 - accuracy: 0.6654 - val_loss: 0.8770 - val_accuracy: 0.6742\n",
      "Epoch 5/20\n",
      "13/13 - 8s - loss: 0.7226 - accuracy: 0.7453 - val_loss: 0.7533 - val_accuracy: 0.7135\n",
      "Epoch 6/20\n",
      "13/13 - 8s - loss: 0.9141 - accuracy: 0.7066 - val_loss: 1.4176 - val_accuracy: 0.5449\n",
      "Epoch 7/20\n",
      "13/13 - 8s - loss: 0.8701 - accuracy: 0.6829 - val_loss: 0.9323 - val_accuracy: 0.6517\n",
      "Epoch 8/20\n",
      "13/13 - 8s - loss: 0.6778 - accuracy: 0.7559 - val_loss: 0.7102 - val_accuracy: 0.7584\n",
      "Epoch 9/20\n",
      "13/13 - 9s - loss: 0.5715 - accuracy: 0.7953 - val_loss: 0.5090 - val_accuracy: 0.8146\n",
      "Epoch 10/20\n",
      "13/13 - 9s - loss: 0.4963 - accuracy: 0.8283 - val_loss: 0.5387 - val_accuracy: 0.8202\n",
      "Epoch 11/20\n",
      "13/13 - 9s - loss: 0.4566 - accuracy: 0.8521 - val_loss: 0.4989 - val_accuracy: 0.8371\n",
      "Epoch 12/20\n",
      "13/13 - 8s - loss: 0.4890 - accuracy: 0.8365 - val_loss: 0.4269 - val_accuracy: 0.8427\n",
      "Epoch 13/20\n",
      "13/13 - 8s - loss: 0.3773 - accuracy: 0.8777 - val_loss: 0.4917 - val_accuracy: 0.7921\n",
      "Epoch 14/20\n",
      "13/13 - 8s - loss: 0.3627 - accuracy: 0.8864 - val_loss: 0.3298 - val_accuracy: 0.8989\n",
      "Epoch 15/20\n",
      "13/13 - 9s - loss: 0.3599 - accuracy: 0.8764 - val_loss: 0.3592 - val_accuracy: 0.8876\n",
      "Epoch 16/20\n",
      "13/13 - 9s - loss: 0.3268 - accuracy: 0.9001 - val_loss: 0.3738 - val_accuracy: 0.8820\n",
      "Epoch 17/20\n",
      "13/13 - 7s - loss: 0.3065 - accuracy: 0.9001 - val_loss: 0.4953 - val_accuracy: 0.8315\n",
      "Epoch 18/20\n",
      "13/13 - 7s - loss: 0.2927 - accuracy: 0.9020 - val_loss: 0.2447 - val_accuracy: 0.9157\n",
      "Epoch 19/20\n",
      "13/13 - 7s - loss: 0.2610 - accuracy: 0.9170 - val_loss: 0.2441 - val_accuracy: 0.9157\n",
      "Epoch 20/20\n",
      "13/13 - 7s - loss: 0.2509 - accuracy: 0.9263 - val_loss: 0.3444 - val_accuracy: 0.9045\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<tensorflow.python.keras.callbacks.History at 0x2450ff57c50>"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dme_model.fit([sequence_train]*2, y_train, batch_size=128, epochs=20, verbose=2, validation_split=0.1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "               precision    recall  f1-score   support\n",
      "\n",
      "     business       0.90      0.94      0.92        90\n",
      "entertainment       0.95      0.78      0.86        88\n",
      "     politics       0.95      0.81      0.87        73\n",
      "        sport       0.91      0.98      0.95       106\n",
      "         tech       0.83      0.97      0.89        88\n",
      "\n",
      "     accuracy                           0.90       445\n",
      "    macro avg       0.91      0.90      0.90       445\n",
      " weighted avg       0.91      0.90      0.90       445\n",
      "\n"
     ]
    }
   ],
   "source": [
    "print(classification_report([diz_label[i] for i in np.argmax(y_test, axis=1)], \n",
    "                            [diz_label[i] for i in np.argmax(dme_model.predict([sequence_test]*2), axis=1)]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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L/g2fj9QIqPMzrkJeI9KKFKqsv7XFxEp5BRUhLfktVh7A+tCbE9edzoRqJwvNRIRkUJLQUV4Ce45+AH4DajhnJsYehcA5gHdzOxB59zxuSiDiIgUOAUV4eV7oIOZdQS2AzuAAcCbZnYK8F+8wON0oCNwtXPub+AxYBWw2Myew+u5aAgkOucm5/9piIjI8UhBRXgZgxcMTAbKAo8554aZ2Z9400lvAw4Bm4CP8QIMnHM/mNn5wFPApEBZGwL7iIiI+EJBRRhxzu0GOoVI/y9eL0Vm+36NN0sk1LaFQLqRvMmzTERERLJD845ERETEFwoqRERExBcKKkRERMQXCipERETEFwoqRERExBcKKkRERMQXCipERETEFwoqRERExBcKKkRERMQXCipERETEFwoqRERExBcKKkRERMQXCipERETEFwoqRERExBcKKkRERMQXCipERETEFwoqRERExBcKKkRERMQXCipERETEFwoqRERExBcKKkRERMQXCipERETEFwoqRERExBcKKkRERMQXCipERETEFwoqRERExBcKKkRERMQXCipERETEFwoqRERExBcKKkRERMQXRQu6AnJ8aFC7CosXPFHQ1Qgbp985vaCrEFY2je5S0FUIK//bd7CgqxB2/vjnQEFXIWwcOHQ4w23qqRARERFfKKgQERERXyioEBEREV8oqBARERFfKKgQERERXyioEBEREV8oqBARERFfKKgQERERXyioEBEREV8oqBARERFfKKgQERERXyioEBEREV8oqBARERFfKKgQERERXyioEBEREV8oqBARERFfKKgQERERXyioEBEREV8oqBARERFfKKgQERERXyioEBEREV8oqBARERFfKKgQERERXyioEBEREV8oqBARERFfKKgQERERXyioEBEREV8oqBARERFfKKiQsDFx/Fjq1T6DCqVPpFXzpiyJ/TLT/LGLF9GqeVMqlD6R+mefyWsTx6XZ/uwzT3Fhy2hOrViGGlWj6Nr5KjZ8921enkK+6t76dFaOvIwtYzrx+UMXE31WhQzzvnRrE+ImXp3utenVjmnydWpWjbmPtGXTqx35+tkrebVHUyqeckJen0q+mTBuDHVqnU65U0rSMqZJltfYl4sX0TKmCeVOKUnd2mcwaULaayz2y8V07dyBM2tW5aQTivDm1Cl5WPv8N3niWBrVO4sqFUrR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\n",
      "text/plain": [
       "<Figure size 504x504 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "cnf_matrix = confusion_matrix([diz_label[i] for i in np.argmax(y_test, axis=1)], \n",
    "                              [diz_label[i] for i in np.argmax(dme_model.predict([sequence_test]*2), axis=1)])\n",
    "\n",
    "plt.figure(figsize=(7,7))\n",
    "plot_confusion_matrix(cnf_matrix, classes=list(diz_label.values()), title=\"Confusion matrix DME\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"model_6\"\n",
      "__________________________________________________________________________________________________\n",
      "Layer (type)                    Output Shape         Param #     Connected to                     \n",
      "==================================================================================================\n",
      "input_6 (InputLayer)            [(None, 200)]        0                                            \n",
      "__________________________________________________________________________________________________\n",
      "input_7 (InputLayer)            [(None, 200)]        0                                            \n",
      "__________________________________________________________________________________________________\n",
      "embedding_4 (Embedding)         (None, 200, 100)     2537000     input_6[0][0]                    \n",
      "__________________________________________________________________________________________________\n",
      "embedding_5 (Embedding)         (None, 200, 100)     2537000     input_7[0][0]                    \n",
      "__________________________________________________________________________________________________\n",
      "reshape_6 (Reshape)             (None, None, 100, 1) 0           embedding_4[0][0]                \n",
      "__________________________________________________________________________________________________\n",
      "reshape_7 (Reshape)             (None, None, 100, 1) 0           embedding_5[0][0]                \n",
      "__________________________________________________________________________________________________\n",
      "concatenate_2 (Concatenate)     (None, None, 100, 2) 0           reshape_6[0][0]                  \n",
      "                                                                 reshape_7[0][0]                  \n",
      "__________________________________________________________________________________________________\n",
      "model_5 (Model)                 (None, 200, 100)     3248        concatenate_2[0][0]              \n",
      "__________________________________________________________________________________________________\n",
      "gru_2 (GRU)                     (None, 200, 128)     88320       model_5[1][0]                    \n",
      "__________________________________________________________________________________________________\n",
      "gru_3 (GRU)                     (None, 32)           15552       gru_2[0][0]                      \n",
      "__________________________________________________________________________________________________\n",
      "dense_1 (Dense)                 (None, 5)            165         gru_3[0][0]                      \n",
      "==================================================================================================\n",
      "Total params: 5,181,285\n",
      "Trainable params: 107,285\n",
      "Non-trainable params: 5,074,000\n",
      "__________________________________________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "### DEFINE NETWORK WITH CDME ###\n",
    "\n",
    "concat_inp = Concat_Emb([embedding_matrix_w2v, embedding_matrix_ft], maxlen=max_len)\n",
    "cdme = CDME(max_len)\n",
    "x = cdme(concat_inp.output)\n",
    "x = GRU(128, dropout=0.2, return_sequences=True)(x)\n",
    "x = GRU(32, dropout=0.2)(x)\n",
    "out = Dense(y.shape[1], activation='softmax')(x)\n",
    "\n",
    "cdme_model = Model(concat_inp.input, out)\n",
    "cdme_model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])\n",
    "\n",
    "cdme_model.summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/20\n",
      "13/13 - 10s - loss: 1.4908 - accuracy: 0.3571 - val_loss: 1.3832 - val_accuracy: 0.4438\n",
      "Epoch 2/20\n",
      "13/13 - 8s - loss: 1.2412 - accuracy: 0.5150 - val_loss: 1.2245 - val_accuracy: 0.5169\n",
      "Epoch 3/20\n",
      "13/13 - 10s - loss: 1.0761 - accuracy: 0.5849 - val_loss: 1.1371 - val_accuracy: 0.5899\n",
      "Epoch 4/20\n",
      "13/13 - 9s - loss: 0.8993 - accuracy: 0.6654 - val_loss: 0.9299 - val_accuracy: 0.6573\n",
      "Epoch 5/20\n",
      "13/13 - 8s - loss: 0.7464 - accuracy: 0.7235 - val_loss: 0.7301 - val_accuracy: 0.7079\n",
      "Epoch 6/20\n",
      "13/13 - 8s - loss: 0.5910 - accuracy: 0.7965 - val_loss: 0.5705 - val_accuracy: 0.8034\n",
      "Epoch 7/20\n",
      "13/13 - 9s - loss: 0.5288 - accuracy: 0.8290 - val_loss: 0.4330 - val_accuracy: 0.8596\n",
      "Epoch 8/20\n",
      "13/13 - 9s - loss: 0.4921 - accuracy: 0.8321 - val_loss: 0.5566 - val_accuracy: 0.8034\n",
      "Epoch 9/20\n",
      "13/13 - 8s - loss: 0.4805 - accuracy: 0.8502 - val_loss: 0.4810 - val_accuracy: 0.8483\n",
      "Epoch 10/20\n",
      "13/13 - 9s - loss: 0.3813 - accuracy: 0.8795 - val_loss: 0.3438 - val_accuracy: 0.8933\n",
      "Epoch 11/20\n",
      "13/13 - 9s - loss: 0.3894 - accuracy: 0.8770 - val_loss: 0.3141 - val_accuracy: 0.9045\n",
      "Epoch 12/20\n",
      "13/13 - 8s - loss: 0.3230 - accuracy: 0.9032 - val_loss: 0.3142 - val_accuracy: 0.9045\n",
      "Epoch 13/20\n",
      "13/13 - 8s - loss: 0.2650 - accuracy: 0.9207 - val_loss: 0.3272 - val_accuracy: 0.8933\n",
      "Epoch 14/20\n",
      "13/13 - 7s - loss: 0.3010 - accuracy: 0.9064 - val_loss: 0.5966 - val_accuracy: 0.8146\n",
      "Epoch 15/20\n",
      "13/13 - 7s - loss: 0.3646 - accuracy: 0.8752 - val_loss: 0.3569 - val_accuracy: 0.8708\n",
      "Epoch 16/20\n",
      "13/13 - 7s - loss: 0.3042 - accuracy: 0.9014 - val_loss: 0.4925 - val_accuracy: 0.8427\n",
      "Epoch 17/20\n",
      "13/13 - 9s - loss: 0.3711 - accuracy: 0.8851 - val_loss: 0.4042 - val_accuracy: 0.8876\n",
      "Epoch 18/20\n",
      "13/13 - 8s - loss: 0.2823 - accuracy: 0.9145 - val_loss: 0.3721 - val_accuracy: 0.8708\n",
      "Epoch 19/20\n",
      "13/13 - 9s - loss: 0.2657 - accuracy: 0.9201 - val_loss: 0.2062 - val_accuracy: 0.9382\n",
      "Epoch 20/20\n",
      "13/13 - 7s - loss: 0.2376 - accuracy: 0.9282 - val_loss: 0.3217 - val_accuracy: 0.9101\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<tensorflow.python.keras.callbacks.History at 0x2451a5ac0b8>"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cdme_model.fit([sequence_train]*2, y_train, batch_size=128, epochs=20, verbose=2, validation_split=0.1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "               precision    recall  f1-score   support\n",
      "\n",
      "     business       0.85      0.98      0.91        90\n",
      "entertainment       0.94      0.82      0.87        88\n",
      "     politics       0.79      0.96      0.86        73\n",
      "        sport       0.96      0.94      0.95       106\n",
      "         tech       0.96      0.78      0.86        88\n",
      "\n",
      "     accuracy                           0.90       445\n",
      "    macro avg       0.90      0.90      0.89       445\n",
      " weighted avg       0.91      0.90      0.90       445\n",
      "\n"
     ]
    }
   ],
   "source": [
    "print(classification_report([diz_label[i] for i in np.argmax(y_test, axis=1)], \n",
    "                            [diz_label[i] for i in np.argmax(cdme_model.predict([sequence_test]*2), axis=1)]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 504x504 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "cnf_matrix = confusion_matrix([diz_label[i] for i in np.argmax(y_test, axis=1)], \n",
    "                              [diz_label[i] for i in np.argmax(cdme_model.predict([sequence_test]*2), axis=1)])\n",
    "\n",
    "plt.figure(figsize=(7,7))\n",
    "plot_confusion_matrix(cnf_matrix, classes=list(diz_label.values()), title=\"Confusion matrix CDME\")\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python [conda env:tensorflow2]",
   "language": "python",
   "name": "conda-env-tensorflow2-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
